<?php

/**
 * compra actions.
 *
 * @package    comande
 * @subpackage compra
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class compraActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  **/
    // mediante este servicio se muestran los paquetes que tiene Comande
    // recibe los parametros enviados por practil. 
  public function executeIndex(sfWebRequest $request)
  {

     try{

      $token= "esferadigital";
      $token = md5($token);
      $req = "http://practil.com/xml_servicio_comande/paquetes_comande?token=".$token;

      $lib = new myLib();
      $respuesta = file_get_contents($req);
      $result = $lib->xml2array($respuesta);

      $items=$result['practil'];
      foreach ($items as $item){
          if(isset($item['codigo'])){
              if($item['codigo']== "50001"){

                  $this->list_detalle = $result['practil']['item'];

              }
          }
      }


    }catch(Exception $e){
      $this->list_detalle = null;
    }
  }

  public function executeEnvio_datos(sfWebRequest $request)
  {

     try{
      //recibo parametros
      $email_usu = $request->getParameter('email_usu');
      $codigo_paquete = $request->getParameter('codigo_paquete');
      $precio = $request->getParameter('precio');
      $nombre_paquete = $request->getParameter('nombrepaq');
      $descripcion = $request->getParameter('descripcion');
      $duracion_paq = $request->getParameter('duracion_paq');

      //datos del paquete
      $numerodepcs = $request->getParameter('numerodepcs');
      $pantallazos = $request->getParameter('pantallazos');
      $programas = $request->getParameter('programas');

        
      $this->codigo_usuario_practil = $this->getUser()->getAttribute('ses_user_id_practil');
      $this->codigo_paquete = $codigo_paquete;
      $this->precio =  $precio;
      $this->nombrepaquete = $nombre_paquete;
      $this->descripcion = $descripcion;
      $this->duracion_paq = $duracion_paq;

      //datos del paquete
      $this->numerodepcs = $numerodepcs;
      $this->pantallazos = $pantallazos;
      $this->programas = $programas;
 

    }catch(Exception $e){
      $this->list_detalle = null;
    }
  }
   public function executeCompra_paquete_practil(sfWebRequest $request)
  {
  
  //recibo parametros
  
$id_usuario = $request->getParameter('id_usuario');
$id_paquete = $request->getParameter('id_paquete');
$precio_compra = $request->getParameter('precio_compra');
$estado_compra = $request->getParameter('estado_compra');
$email_usu = $request->getParameter('email');
$password = $request->getParameter('pass_usu');
$duracion_paq = $request->getParameter('duacion_paq');
$nombre_paquete = $request->getParameter('nombre_paq');

//datos del paquete
$numero_pcs = $request->getParameter('numerodepcs');
$pantallazos = $request->getParameter('pantallazos');
$programas = $request->getParameter('programas');

try {

//verifico autenticacion de usuario antes de hacer la compra
      $token= "esferadigital";
      $token = md5($token);
      $servicio_practil = 'http://practil.com/xml_servicio_usuario/verificar_autenticacion?';
      $servicio_practil .= 'email='.$email_usu."&token=".$token."&password=".md5($password);

      $lib = new myLib();
      $respuesta = file_get_contents($servicio_practil);
      $result = $lib->xml2array($respuesta);
      $con = Propel::getConnection();
      $con->beginTransaction();
      $items=$result['practil'];
      foreach ($items as $item){
           if(isset($item['code'])){
              if($item['code']=="60010"){ // son iguales
                //primero se busca si se hay un registro con el mismo paquete
              /*   try{
                 $id_usuario_local = $this->getUser()->getAttribute('ses_user_id');
                 $opcion_busqueda = new Criteria();
                 $opcion_busqueda->add(PaquetesActualesPeer::PAQUETE_PRACTIL_ID,$id_paquete);
                 $opcion_busqueda->add(PaquetesActualesPeer::USUARIO_ID,$id_usuario_local);
                 $opcion_busqueda->add(PaquetesActualesPeer::ESTADO, "H", Criteria::LIKE);
                 $cantidad_bus = PaquetesActualesPeer::doCount($opcion_busqueda);

                 if($cantidad_bus>0){
                   //$new_consumo_usuario->setFechaRenovacion($fecha);
                        $this->code = "4018";
                        $this->respuesta = "Ya existe el paquete asociado al cliente";
                        $con->rollback();
                        return sfView::ERROR;
                 }else{
                   $bus2 = new Criteria();
                   $bus2->add(PaquetesActualesPeer::ESTADO, "H", Criteria::LIKE);
                   $bus2->add(PaquetesActualesPeer::USUARIO_ID,$id_usuario_local);
                   $can1 = PaquetesActualesPeer::doCount($bus2);
                   if($can1>0){
                      $reg =  PaquetesActualesPeer::doSelectOne($bus2);
                      $reg->setEstado("D");
                      $reg->save();
                   }
                 }
                 }catch(Exception $e){
                     //$new_consumo_usuario->setFechaRenovacion($fecha);
                        $this->code = "4019";
                        $this->respuesta = "Error en la validacion de existencia de paquete o actualizacion de Estado";
                        $con->rollback();
                        return sfView::ERROR;
                 }
                 //segundo se registra los datos en la tabla paquetes actuales
                 try{

             $parametros_paquetes =  json_encode(array(
		"numero_de_pcs"	=> $numero_pcs	,
                "pantallazos"	=> $pantallazos,
                "programas"  => $programas
                ));

                  $new_paquetes_actuales = new PaquetesActuales();
                  $new_paquetes_actuales->setTituloPaquete($nombre_paquete);
                  $new_paquetes_actuales->setDescripcionPaquete($parametros_paquetes);
                  $new_paquetes_actuales->setDuracionPaquete($duracion_paq);
                  $new_paquetes_actuales->setPaquetePractilId($id_paquete);
                  $fecha_calculada =  $this->execute_calcular_fechas($duracion_paq);
                  print_r($fecha_calculada." compra_practil");
                  if($fecha_calculada!=0)
                  $new_paquetes_actuales->setFechaRenovacion($fecha_calculada);
                  else{
                     //$new_consumo_usuario->setFechaRenovacion($fecha);
                        $this->code = "4002";
                        $this->respuesta = "Error en funcion de Fechas";
                        $con->rollback();
                        return sfView::ERROR;

                    }
                  $new_paquetes_actuales->setEstado("H");
                  $id_usuario_local = $this->getUser()->getAttribute('ses_user_id');
                  $new_paquetes_actuales->setUsuarioId($id_usuario_local);
                  $new_paquetes_actuales->save();
                  
              }catch(Exception $exc){
              $con->rollback();
              $this->code = "4001";
              $this->respuesta = "No se registro en la tabla paquetes Actuales";
                return sfView::ERROR;
            }
         */
            try{
                // efectuo la compra del paquete
      $servicio_compra_paquete_practil = 'http://practil.com/xml_servicio_pagos/compra_paqueteusuario?';
      $servicio_compra_paquete_practil .= 'monto_compra='.$precio_compra."&codigo_usuario=".trim($id_usuario)."&paquete_id=".$id_paquete."&estado=".$estado_compra."&token=".$token;

      $respuesta2 = file_get_contents($servicio_compra_paquete_practil);
      $result2 = $lib->xml2array($respuesta2);
   
      $items2=$result2['practil'];
      foreach ($items2 as $item2){
           if(isset($item2['code'])){
                if($item2['code']=="3010"){ // si se realizo con exito
                    // guardamos la fecha de caducacion
   
                    /* INICIO DE CORREO */
                $message = $this->getMailer()->compose();
                $message->setSubject('Comande - Compra del Paquete '.$nombre_paquete);
                $message->setTo($email_usu);
                $message->setFrom('mrios@grafilab.com');
                $html = $this->getPartial('compra/mensaje_compra_paquete', array(
                'nombre_paquete'=>$nombre_paquete,
                 'precio'=>$precio_compra,
                    'vigencia'=>$duracion_paq,
                    'nombre_paquete'=>$password,
                    'nombre_paquete'=>$password,));
                $message->setBody($html, 'text/html');
                $this->getMailer()->send($message);
     /* FIN DE CORREO */
                      $con->commit();
                      $this->code = "4003";
                      $this->respuesta = "Operacion Exitosa!!";
                      return sfView::SUCCESS;
                  }elseif($item2['code']=="3018"){
                       $con->rollback();
                      $this->code = "4004";
                      $this->respuesta = "No Existe el paquete solicitado!";
                      return sfView::ERROR;
                  }elseif($item2['code']=="3017"){
                       $con->rollback();
                      $this->code = "4005";
                      $this->respuesta = "Precio Invalido de Paquete";
return sfView::ERROR;
                  }elseif($item2['code']=="3015"){
                       $con->rollback();
                      $this->code = "4006";
                      $this->respuesta ="No existe el Usuario";
                      return sfView::ERROR;
                  }elseif($item2['code']=="3005"){
                       $con->rollback();
                      $this->code = "4007";
                      $this->respuesta = "Saldo no suficiente para efectuar la transaccion";
                      return sfView::ERROR;
                      }elseif($item2['code']=="3013"){
                       $con->rollback();
                      $this->code = "4008";
                      $this->respuesta = "Error en registrar datos en  la tabla de estado de cuenta";
                      return sfView::ERROR;
                  }elseif($item2['code']=="3001"){
                       $con->rollback();
                      $this->code = "4009";
                      $this->respuesta = "Operacion Erronea servicio practil codigo 3001";
                      return sfView::ERROR;
                  }else{
                       $con->rollback();
                      $this->code = "4010";
                      $this->respuesta = "Token Erroneo";
                      return sfView::ERROR;
                  }
              }else{
                   $con->rollback();
                   $this->code = "4011";
                   $this->respuesta = "No se recibio respuesta del servicio Practil 2";
                   return sfView::ERROR;
              }
           }
            }catch(Exception $exc){
              $con->rollback();
              throw $exc;
              $this->code = "4012";
              $this->respuesta = "No se registro en la tabla paquetes Actuales";
               return sfView::ERROR;
            }
        }else{
                  if($item['code']=="60002"){
                      $this->code = "4013";
                      $this->respuesta = "Error Interno en VerificarAutenticacion - servicio_usuario - Practil!";
                      return sfView::ERROR;
                  }elseif($item['code']=="60012"){
                     $this->code = "4014";
                     $this->respuesta = "Usuario No Existe!";
                     return sfView::ERROR;
                     }else{
                      $this->code = "4015";
                      $this->respuesta = "Autenticacion Erronea!";
                      return sfView::ERROR;

                  }
                  
              }
      }else{
               $this->code = "4016";
               $this->respuesta = "No se recibio respuesta del servicio Practil 1";
               return sfView::ERROR;
      }



   }

} catch (Exception $exc) {
    $this->code = "4017";
    $this->respuesta = "Error General";
     throw $exc;
     return sfView::ERROR;
}

}

public function execute_calcular_fechas($cantidad_dias){

   try{
       print_r($cantidad_dias);
      //obtengo las fechas
      $mes =  date("m");
      $anio = date("Y");
      $dia =  date("d");
      // rescato el ultimo dia segun la fecha actual 19/09/2011  $ultimo_dia = 19
      $dia_actual = date( "d", mktime(0, 0, 0, $mes + 1, 0, $anio) ) ;
      //asigno la cantidad de dias que deseo sumar
      $dias_adelanto = $cantidad_dias;
      //sumo la cantidad de dias al dia actual
      $dias_sumados = $dia + $dias_adelanto;
      if ($dia_actual < $dias_sumados)
      {
         $dia_final = $dias_sumados - $dia_actual;
         $mes++;
         if ($mes == '13')
         {
            $anio++;
            $mes = '01';
         }
         $fecha_final = $anio.'-'.$mes.'-'.$dia_final;
         //$fecha_final = $dia_final.'/'.$mes.'/'.$anio;
          print_r($fecha_final);
      }
      else
      {
         $fecha_final = $anio.'-'.$mes.'-'.$dias_sumados ;
         // $fecha_final = $dias_sumados .'/'.$mes.'/'.$anio;
         print_r($fecha_final);
      }
      return $fecha_final;

 }catch(Exception $e){
    return 0;

   }

}


}
